package br.usp.ime.protoc.genotipagem;

import java.util.HashSet;
import java.util.Iterator;

import com.google.gwt.user.client.rpc.IsSerializable;

import br.usp.ime.protoc.fujaba.FEmptyIterator;

public abstract class Amostra implements IsSerializable
{
   private String coletor;

   public String getColetor()
   {
      return this.coletor;
   }

   public void setColetor(String value)
   {
      if (this.coletor != value)
      {
         
         this.coletor = value;
         
      }
   }

   private String dataColeta;

   public String getDataColeta()
   {
      return this.dataColeta;
   }

   public void setDataColeta(String value)
   {
      if (this.dataColeta != value)
      {
         
         this.dataColeta = value;
         
      }
   }

   private int id;

   public int getId()
   {
      return this.id;
   }

   public void setId(int value)
   {
      if (this.id != value)
      {
         
         this.id = value;
         
      }
   }

   private String localColeta;

   public String getLocalColeta()
   {
      return this.localColeta;
   }

   public void setLocalColeta(String value)
   {
      if (this.localColeta != value)
      {
         
         this.localColeta = value;
         
      }
   }

   private String localTermo;

   public String getLocalTermo()
   {
      return this.localTermo;
   }

   public void setLocalTermo(String value)
   {
      if (this.localTermo != value)
      {
         
         this.localTermo = value;
         
      }
   }

   private String numeroTermo;

   public String getNumeroTermo()
   {
      return this.numeroTermo;
   }

   public void setNumeroTermo(String value)
   {
      if (this.numeroTermo != value)
      {
         
         this.numeroTermo = value;
         
      }
   }

   private String responsavel;

   public String getResponsavel()
   {
      return this.responsavel;
   }

   public void setResponsavel(String value)
   {
      if (this.responsavel != value)
      {
         
         this.responsavel = value;
         
      }
   }

   private String volume;

   public String getVolume()
   {
      return this.volume;
   }

   public void setVolume(String value)
   {
      if (this.volume != value)
      {
         
         this.volume = value;
         
      }
   }

   /**
    * <pre>
    *          1..*        has        1 
    * Amostra -------------------------- Genotipagem
    *          amostra      genotipagem 
    * </pre>
    */
   private Genotipagem genotipagem;

   public Genotipagem getGenotipagem()
   {
      return this.genotipagem;
   }

   public boolean setGenotipagem(Genotipagem value)
   {
      boolean changed = false;
      if (this.genotipagem != value)
      {
         Genotipagem oldValue = this.genotipagem;
         
         if (this.genotipagem != null)
         {
            this.genotipagem = null;
            oldValue.removeFromAmostra (this);
         }
         this.genotipagem = value;
         if (value != null)
         {
            value.addToAmostra (this);
         }
         changed = true;
         
      }
      return changed;
   }

   /**
    * <pre>
    *          1      has      1..* 
    * Amostra ---------------------- TuboDNA
    *          amostra      tuboDNA 
    * </pre>
    */
   private HashSet tuboDNA;

   public boolean addToTuboDNA(TuboDNA value)
   {
      boolean changed = false;
      if (value != null)
      {
         if (this.tuboDNA == null)
         {
            this.tuboDNA = new HashSet (); // or FTreeSet () or FLinkedList ()
         }
         
         changed = this.tuboDNA.add (value);
         if (changed)
         {
            value.setAmostra (this);
         }
         
      }
      return changed;
   }

   public boolean hasInTuboDNA(TuboDNA value)
   {
      return ((this.tuboDNA != null) &&
              (value != null) &&
              this.tuboDNA.contains (value));
   }

   public Iterator iteratorOfTuboDNA()
   {
      return ((this.tuboDNA == null)
              ? FEmptyIterator.get ()
              : this.tuboDNA.iterator ());
   }

   public void removeAllFromTuboDNA()
   {
      TuboDNA tmpValue;
      Iterator iter = this.iteratorOfTuboDNA ();
      while (iter.hasNext ())
      {
         tmpValue = (TuboDNA) iter.next ();
         this.removeFromTuboDNA (tmpValue);
      }
   }

   public boolean removeFromTuboDNA(TuboDNA value)
   {
      boolean changed = false;
      if ((this.tuboDNA != null) && (value != null))
      {
         
         changed = this.tuboDNA.remove (value);
         if (changed)
         {
            value.setAmostra (null);
         }
         
      }
      return changed;
   }

   public int sizeOfTuboDNA()
   {
      return ((this.tuboDNA == null)
              ? 0
              : this.tuboDNA.size ());
   }

   /**
    * <pre>
    *          1      has      1..* 
    * Amostra ---------------------- TuboRNA
    *          amostra      tuboRNA 
    * </pre>
    */
   private HashSet tuboRNA;

   public boolean addToTuboRNA(TuboRNA value)
   {
      boolean changed = false;
      if (value != null)
      {
         if (this.tuboRNA == null)
         {
            this.tuboRNA = new HashSet (); // or FTreeSet () or FLinkedList ()
         }
         
         changed = this.tuboRNA.add (value);
         if (changed)
         {
            value.setAmostra (this);
         }
         
      }
      return changed;
   }

   public boolean hasInTuboRNA(TuboRNA value)
   {
      return ((this.tuboRNA != null) &&
              (value != null) &&
              this.tuboRNA.contains (value));
   }

   public Iterator iteratorOfTuboRNA()
   {
      return ((this.tuboRNA == null)
              ? FEmptyIterator.get ()
              : this.tuboRNA.iterator ());
   }

   public void removeAllFromTuboRNA()
   {
      TuboRNA tmpValue;
      Iterator iter = this.iteratorOfTuboRNA ();
      while (iter.hasNext ())
      {
         tmpValue = (TuboRNA) iter.next ();
         this.removeFromTuboRNA (tmpValue);
      }
   }

   public boolean removeFromTuboRNA(TuboRNA value)
   {
      boolean changed = false;
      if ((this.tuboRNA != null) && (value != null))
      {
         
         changed = this.tuboRNA.remove (value);
         if (changed)
         {
            value.setAmostra (null);
         }
         
      }
      return changed;
   }

   public int sizeOfTuboRNA()
   {
      return ((this.tuboRNA == null)
              ? 0
              : this.tuboRNA.size ());
   }

   public void removeYou()
   {
      removeAllFromTuboRNA ();
      removeAllFromTuboDNA ();
      Genotipagem tmpGenotipagem = getGenotipagem ();
      if (tmpGenotipagem != null)
      {
         setGenotipagem (null);
      }
   }

}
